package com.example.array.doublepointer;

public class Leetcode27_removeElement {
    public static void main(String[] args) {
        int[] nums = new int[]{3, 2, 2, 3};
        System.out.println(removeElement(nums, 3));
        System.out.println("==================");
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }

    }

    /**
     * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，
     * 并返回移除后数组的新长度。
     * <p>
     * 解法:双指针
     * 思路:
     * 两个指针一个用于遍历数组j，一个用于记录有多少个不要要移除的数据i
     * j每次遍历不断自增
     * 当nums[j]==val时，j++跳过该数据
     * 当nums[j]!=val时.将该数据赋值给nums[i],然后i++
     *
     * @param nums
     * @param val
     * @return
     */
    public static int removeElement(int[] nums, int val) {
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != val) {
                nums[i++] = nums[j];
            }
        }
        return i;
    }
}
